/*--------------------------------*- C++ -*----------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     | Website:  https://openfoam.org
    \\  /    A nd           | Version:  dev
     \\/     M anipulation  |
\*---------------------------------------------------------------------------*/
FoamFile
{
    format      ascii;
    class       dictionary;
    location    "system";
    object      collapseDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// If on, after collapsing check the quality of the mesh. If bad faces are
// generated then redo the collapsing with stricter filtering.
controlMeshQuality      on;


collapseEdgesCoeffs
{
    // Edges shorter than this absolute value will be merged
    minimumEdgeLength   1e-6;

    // The maximum angle between two edges that share a point attached to
    // no other edges
    maximumMergeAngle   30;
}


collapseFacesCoeffs
{
    // The initial face length factor
    initialFaceLengthFactor     0.5;

    // If the face can't be collapsed to an edge, and it has a span less than
    // the target face length multiplied by this coefficient, collapse it
    // to a point.
    maxCollapseFaceToPointSideLengthCoeff   0.3;

    // Allow early collapse of edges to a point
    allowEarlyCollapseToPoint               on;

    // Fraction to premultiply maxCollapseFaceToPointSideLengthCoeff by if
    // allowEarlyCollapseToPoint is enabled
    allowEarlyCollapseCoeff                 0.2;

    // Defining how close to the midpoint (M) of the projected
    // vertices line a projected vertex (X) can be before making this
    // an invalid edge collapse
    //
    // X---X-g----------------M----X-----------g----X--X
    //
    // Only allow a collapse if all projected vertices are outwith
    // guardFraction (g) of the distance form the face centre to the
    // furthest vertex in the considered direction
    guardFraction                           0.1;
}


controlMeshQualityCoeffs
{
    // Name of the dictionary that has the mesh quality coefficients used
    // by meshCheck::checkMesh
    #include                    "meshQualityDict"

    // The amount that minimumEdgeLength will be reduced by for each
    // edge if that edge's collapse generates a poor quality face
    edgeReductionFactor         0.5;

    // The amount that initialFaceLengthFactor will be reduced by for each
    // face if its collapse generates a poor quality face
    faceReductionFactor         0.5;

    // Maximum number of smoothing iterations for the reductionFactors
    maximumSmoothingIterations  2;

    // Maximum number of outer iterations is mesh quality checking is enabled
    maximumIterations           10;

    // Maximum number of iterations deletion of a point can cause a bad face
    // to be constructed before it is forced to not be deleted
    maxPointErrorCount          5;
}


// ************************************************************************* //
